/**
 * 根据规则校验是否为整数
 * @param rule
 * @param value
 * @param callback
 */
export const checkInteger = (rule, value, callback) => {
	if (value) {
		if (!isInteger(value)) {
			callback(new Error(rule.message))
		}
		if (rule.max && parseInt(value) > parseInt(rule.max)) {
			callback(new Error(rule.message))
		}
		if (rule.min && parseInt(value) < parseInt(rule.min)) {
			callback(new Error(rule.message));
		}
	}
	callback()
}
/**
 * 校验是否为整数
 * @param value
 * @returns {boolean}
 */
export const isInteger = (value) => {
	return value % 1 === 0
}
/**
 * 根据规则校验是否为数字
 * @param rule
 * @param value
 * @param callback
 */
export const checkNumber = (rule, value, callback) => {
	if (value) {
		if (isNaN(Number(value))) {
			callback(new Error(rule.message))
		}
		if (rule.max && Number(value) > Number(rule.max)) {
			callback(new Error(rule.message))
		}
		if (rule.min && Number(value) < Number(rule.min)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
/**
 * 校验是否为数字
 * @param rule
 * @param value
 * @param callback
 */
export const checkNumStr = (rule, value, callback) => {
	if (value) {
		if (!isNumStr(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
/**
 * 是否为数字正则
 * @param value
 * @returns {boolean}
 */
export const isNumStr = (value) => {
	return /^[0-9]*$/.test(value)
}
/**
 * 是否手机号码正则
 * @param value
 * @returns {boolean}
 */

export const isMobile = (value) => {
	return /^1[0-9]{10}$/.test(value)
}
/**
 * 是否电话号码正则
 * @param value
 * @returns {boolean}
 */
export const isTel = (value) => {
	// return /^0\d{2,3}-?\d{7,8}$/.test(value)
	return /^((\d{3,4}-)|(\d{3.4}-))?\d{7,8}$/.test(value)
}
/**
 * 校验手机号码
 * @param rule
 * @param value
 * @param callback
 */
export const checkPhone = (rule, value, callback) => {
	if (value) {
		if (!isMobile(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
/**
 * 校验电话号码
 * @param rule
 * @param value
 * @param callback
 */
export const checkTel = (rule, value, callback) => {
	if (value) {
		if (!isTel(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
/**
 * 校验手机或电话号码
 * @param rule
 * @param value
 * @param callback
 */
export const checkTelOrPhone = (rule, value, callback) => {
	if (value) {
		if (!isMobile(value) && !isTel(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
/**
 * 校验银行卡
 * @param rule
 * @param value
 * @param callback
 */
export const checkBankcard = (rule, value, callback) => {
	if (value) {
		if (!isNumStr(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
/**
 * 校验压缩包
 * @param rule
 * @param value
 * @param callback
 */
export const checkZipCode = (rule, value, callback) => {
	if (value) {
		if (!isZipCode(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
export const isZipCode = (value) => {
	return /^[1-9]\d{5}$/.test(value)
}
export const checkIdcard = (rule, value, callback) => {
	if (value) {
		if (!isIdcard(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
export const isIdcard = (value) => {
	return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value)
}
export const checkBusinessLicense = (rule, value, callback) => {
	if (value) {
		if (!isNumAndWord(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
export const isNumAndWord = (value) => {
	return /^[0-9A-Za-z]+$/.test(value)
}
export const isMoney = (value) => {
	return /^(([0-9][0-9]*)|(([0]\.\d{1,2}|[1-9][0-9]*\.\d{1,2})))$/.test(value)
}
export const checkMoney = (rule, value, callback) => {
	if (value) {
		if (!isMoney(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
export const isArea = (value) => {
	return /^\d+(\.\d{1,4})?$/.test(value)
}
export const checkArea = (rule, value, callback) => {
	if (value) {
		if (!isArea(value)) {
			callback(new Error(rule.message))
		}
	}
	callback()
}
export const positiveNumber = (rule, value, callback) => {
	if (value) {
		if ((/^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/).test(value) == false) {
			callback(new Error(rule.message));
		} else {
			callback();
		}
	} else {
		callback();
	}
}
/**
 * 根据规则校验断面部位编号
 * @param rule
 * @param value
 * @param callback
 */
export const checkSectionCode = (rule, value, callback) => {
	if (value) {
		if (!(/^[a-zA-Z]+-[0-9]+$/).test(value)) {
			callback(new Error(rule.message));
		}
	}
	callback()
}
export const checkEmail = (rule, value, callback) => {
	if (!value) {
		callback();
	}
	if (/^\w{1,64}@[a-z0-9\-]{1,256}(\.[a-z]{2,6}){1,2}$/i.test(value) === false) {
		callback(new Error(rule.message));
	} else {
		callback();
	}
}
/**
 * 校验费表编号
 * @param rule
 * @param value
 * @param callback
 */
export const checkMeterCode = (rule, value, callback) => {
	if (value) {
		if (!(/^[a-zA-Z][0-9a-zA-Z_]*$/).test(value)) {
			callback(new Error(rule.message));
		} else {
			callback();
		}
	} else {
		callback();
	}
}